﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Foundation.ObjectHydrator.Interfaces;

namespace Foundation.ObjectHydrator.Generators
{
    /// <summary>
    /// Produces a random American City
    /// </summary>
    public class AmericanCityGenerator:IGenerator<string>
    {
        /// <summary>
        /// Instance of Random Singleton
        /// </summary>
        Random random;

        /// <summary>
        /// Local var for citynames
        /// </summary>
        IList<string> citynames = new List<string>();

        /// <summary>
        /// Default Constructor
        /// </summary>
        public AmericanCityGenerator()
        {
            random = RandomSingleton.Instance.Random;
            LoadCityNames();
        }

        /// <summary>
        /// Populates the citynames list with names of cities
        /// </summary>
        private void LoadCityNames()
        {
            citynames = new List<string>() { "indianapolis",
"portland",
"los angeles",
"grand rapids",
"houston",
"columbus",
"albuquerque",
"phoenix",
"nashville",
"springfield",
"chicago",
"charlotte",
"san antonio",
"austin",
"louisville",
"seattle",
"jacksonville",
"new york",
"las vegas",
"colorado springs",
"orlando",
"madison",
"evansville",
"santa ana",
"omaha",
"brooklyn",
"san diego",
"newark",
"dallas",
"lexington",
"dayton",
"wilmington",
"washington",
"miami",
"cincinnati",
"columbia",
"tacoma",
"milwaukee",
"philadelphia",
"richmond",
"bakersfield",
"fort wayne",
"baltimore",
"pittsburgh",
"arlington",
"long beach",
"wichita",
"san francisco",
"jackson",
"toledo",
"muskegon",
"terre haute",
"san jose",
"salem",
"atlanta",
"lancaster",
"greenville",
"fort worth",
"huntington beach",
"greensboro",
"tucson",
"franklin",
"vancouver",
"akron",
"huntington",
"minneapolis",
"marion",
"orange",
"denver",
"rochester",
"mesa",
"tampa",
"lafayette",
"cleveland",
"spokane",
"bloomington",
"lebanon",
"kansas city",
"el paso",
"anaheim",
"aurora",
"peoria",
"battle creek",
"glendale",
"lakewood",
"canton",
"monroe",
"lincoln",
"oklahoma city",
"alexandria",
"henderson",
"cedar rapids",
"memphis",
"knoxville",
"wyoming",
"charleston",
"irvine",
"rockford",
"sacramento",
"des moines",
"marietta",
"middletown",
"clarksville",
"anderson",
"ashland",
"bellevue",
"auburn",
"shreveport",
"raleigh",
"hillsboro",
"clinton",
"westminster",
"cape coral",
"chattanooga",
"tulsa",
"beaverton",
"traverse city",
"beaumont",
"athens",
"decatur",
"naples",
"eugene",
"garden grove",
"reading",
"manchester",
"albany",
"lansing",
"riverside",
"savannah",
"fullerton",
"gainesville",
"bronx",
"lakeland",
"fremont",
"buffalo",
"fort myers",
"costa mesa",
"chandler",
"fayetteville",
"burlington",
"dover",
"st. louis",
"tallahassee",
"scottsdale",
"holland",
"new castle",
"bowling green",
"olympia",
"greenwood",
"pasadena",
"kalamazoo",
"murfreesboro",
"oakland",
"plano",
"mobile",
"norwalk",
"fredericksburg",
"concord",
"sarasota",
"troy",
"york",
"flint",
"roanoke",
"hendersonville",
"santa rosa",
"mansfield",
"covington",
"georgetown",
"corpus christi",
"medford",
"elkhart",
"smyrna",
"danville",
"huntsville",
"davenport",
"florence",
"greenfield",
"cambridge",
"lawrenceville",
"kent",
"kenosha",
"mount vernon",
"milford",
"shelbyville",
"birmingham",
"rio rancho",
"montgomery",
"hamilton",
"hudson",
"fresno",
"harrisburg",
"bradenton",
"warren",
"carmel",
"independence",
"pensacola",
"yakima",
"saint paul",
"bedford",
"st. paul",
"plymouth",
"mission viejo",
"ocala",
"iowa city",
"kentwood",
"gilbert",
"augusta",
"tempe",
"virginia beach",
"littleton",
"frankfort",
"oxford",
"plainfield",
"winchester",
"winston salem",
"noblesville",
"puyallup",
"south bend",
"wooster",
"baton rouge",
"everett",
"antioch",
"carrollton",
"lima",
"silver spring",
"durham",
"chillicothe",
"tyler",
"marysville",
"spring hill",
"bristol",
"sioux city",
"racine",
"fairfield",
"marshall",
"lowell",
"oceanside",
"torrance",
"brunswick",
"portage",
"milton",
"spring",
"newport",
"adrian",
"englewood",
"garland",
"billings",
"stockton",
"sanford",
"tustin",
"muncie",
"corona",
"longview",
"waukesha",
"salisbury",
"brandon",
"leesburg",
"hastings",
"princeton",
"farmington",
"appleton",
"elgin",
"quincy",
"denton",
"sandusky",
"detroit",
"summerville",
"duluth",
"saint louis",
"sparta",
"west chester",
"medina",
"midland",
"roswell",
"gig harbor",
"little rock",
"topeka",
"whittier",
"boston",
"johnstown",
"asheville",
"grandville",
"woodstock",
"somerset",
"newburgh",
"gastonia",
"lake forest",
"pueblo",
"newton",
"melbourne",
"bend",
"paris",
"centerville",
"roseville",
"chester",
"katy",
"martinsville",
"germantown",
"green bay",
"mooresville",
"bellingham",
"grand haven",
"belmont",
"clayton",
"west palm beach",
"kissimmee",
"lake charles",
"conway",
"dublin",
"fishers",
"winston-salem",
"hampton",
"irving",
"clearwater",
"ashtabula",
"rockville",
"kokomo",
"new orleans",
"monticello",
"great falls",
"erie",
"thomasville",
"lawrence",
"janesville",
"santa fe",
"missoula",
"cumming",
"naperville",
"burbank",
"sioux falls",
"frederick",
"overland park",
"renton",
"lubbock",
"brentwood",
"gresham",
"trenton",
"abilene",
"jamestown",
"liberty",
"delaware",
"allentown",
"cypress",
"port charlotte",
"honolulu",
"watertown",
"chesapeake",
"federal way",
"palm bay",
"high point",
"amarillo",
"jenison",
"alpharetta",
"macon",
"midlothian",
"lehigh acres",
"westfield",
"avon",
"boise",
"loveland",
"port orchard",
"hollywood",
"redmond",
"mckinney",
"greensburg",
"lawrenceburg",
"goshen",
"elkton",
"hermitage",
"palmdale",
"round rock",
"lagrange",
"norman",
"cookeville",
"belleville",
"modesto",
"magnolia",
"morgantown",
"amherst",
"newport beach",
"san marcos",
"fountain valley",
"fairfax",
"panama city",
"elyria",
"bridgeport",
"charlottesville",
"owensboro",
"boca raton",
"warsaw",
"shelby",
"deltona",
"woodbridge",
"milwaukie",
"wayne",
"williamsburg",
"cary",
"harrison",
"stafford",
"benton",
"waco",
"mcminnville",
"sterling",
"gaithersburg",
"bremerton",
"pekin",
"urbana",
"kingston",
"woodbury",
"west lafayette",
"buena park",
"graham",
"elizabethtown",
"shelton",
"jefferson",
"saginaw",
"rock hill",
"laguna niguel",
"grand junction",
"mesquite",
"bossier city",
"laurel",
"apple valley",
"hudsonville",
"camden",
"joliet",
"reno",
"jonesboro",
"norfolk",
"richardson",
"geneva",
"zanesville",
"sunnyvale",
"whitehall",
"santa monica",
"westerville",
"ravenna",
"butler",
"sullivan",
"staten island",
"las cruces",
"findlay",
"brighton",
"lewisburg",
"new haven",
"moline",
"st. petersburg",
"",
"sherman oaks",
"mount pleasant",
"van nuys",
"batavia",
"edmond",
"kettering",
"gallatin",
"yorba linda",
"lynchburg",
"portsmouth",
"chesterfield",
"west monroe",
"council bluffs",
"xenia",
"san pedro",
"escondido",
"port huron",
"st paul",
"bryan",
"jasper",
"carlsbad",
"hanover",
"corvallis",
"olathe",
"flushing",
"albion",
"redondo beach",
"mishawaka",
"simpsonville",
"salt lake city",
"chula vista",
"richland",
"oregon city",
"acworth",
"seymour",
"warner robins",
"carlisle",
"spanaway",
"lake city",
"astoria",
"manassas",
"lawton",
"santa cruz",
"new albany",
"sheboygan",
"waynesboro",
"glasgow",
"bear",
"coon rapids",
"brazil",
"tigard",
"odessa",
"placentia",
"weatherford",
"wellington",
"jeffersonville",
"goodlettsville",
"spencer",
"waterloo",
"muscatine",
"grand prairie",
"stillwater",
"ada",
"spartanburg",
"myrtle beach",
"hixson",
"conroe",
"yuma",
"killeen",
"perry",
"vista",
"pittsfield",
"east peoria",
"sheridan",
"broken arrow",
"worcester",
"mason",
"hammond",
"tiffin",
"hartford",
"temple",
"powell",
"apopka",
"freeport",
"kennesaw",
"lodi",
"hagerstown",
"matthews",
"sidney",
"surprise",
"maryville",
"centralia",
"grove city",
"west allis",
"fort lauderdale",
"union city",
"london",
"coldwater",
"valparaiso",
"waterford",
"paducah",
"ann arbor",
"hutchinson",
"caledonia",
"arcadia",
"spring lake",
"statesville",
"kingsport",
"falls church",
"san bernardino",
"anchorage",
"orange park",
"hot springs",
"berwyn",
"bethesda",
"petaluma",
"san clemente",
"ames",
"el cajon",
"lewiston",
"greer",
"somerville",
"parker",
"lacey",
"lewisville",
"ventura",
"andover",
"fairview",
"aliso viejo",
"fontana",
"kernersville",
"altoona",
"eagan",
"largo",
"fond du lac",
"windsor",
"livingston",
"west bend",
"lumberton",
"brookfield",
"petersburg",
"new port richey",
"brownsville",
"brownsburg",
"rock island",
"shawnee",
"waverly",
"asheboro",
"uniontown",
"youngstown",
"grants pass",
"lockport",
"berea",
"pottstown",
"ontario",
"vidor",
"easley",
"coatesville",
"hickory",
"ephrata",
"elk grove",
"russellville",
"carson",
"douglasville",
"lufkin",
"prescott",
"brea",
"humble",
"chapel hill",
"north hollywood",
"mt. pleasant",
"fort collins",
"beavercreek",
"union",
"eden",
"new london",
"cottage grove",
"lincolnton",
"boynton beach",
"fenton",
"arvada",
"martinez",
"aberdeen",
"st louis",
"defiance",
"stratford",
"clovis",
"la habra",
"visalia",
"dalton",
"miamisburg",
"st. charles",
"deland",
"jersey city",
"stone mountain",
"niles",
"downingtown",
"eureka",
"cuyahoga falls",
"stanton",
"berkeley",
"nicholasville",
"beloit",
"coral springs",
"hayward",
"bloomfield",
"homestead",
"weston",
"annapolis",
"burleson",
"frisco",
"venice",
"ringgold",
"newport news",
"aloha",
"sherman",
"winter haven",
"carthage",
"slidell",
"bothell",
"mount airy",
"phoenixville",
"belton",
"bartlett",
"galesburg",
"dickson",
"palmyra",
"blaine",
"simi valley",
"west des moines",
"mcdonough",
"oshkosh",
"cedar springs",
"champaign",
"pulaski",
"maple grove",
"allendale",
"queen creek",
"ft. myers",
"valrico",
"pearland",
"parma",
"maplewood",
"baytown",
"easton",
"oregon",
"lynnwood",
"webster",
"highland",
"merced",
"pomona",
"old hickory",
"upland",
"peru",
"boone",
"hamburg",
"reidsville",
"piqua",
"moreno valley",
"cordova",
"riverview",
"lake worth",
"grafton",
"rossville",
"texarkana",
"bethlehem",
"hesperia",
"palm coast",
"rome",
"wheeling",
"granbury",
"dubuque",
"silsbee",
"kennewick",
"sun prairie",
"milan",
"columbia city",
"crawfordsville",
"mechanicsburg",
"centennial",
"bettendorf",
"taylorsville",
"port angeles",
"utica",
"beaufort",
"johnson city",
"orrville",
"victoria",
"valdosta",
"maple valley",
"rancho santa margarita",
"bowie",
"cocoa",
"punta gorda",
"stockbridge",
"keller",
"comstock park",
"trinity",
"moore",
"ionia",
"oak harbor",
"mechanicsville",
"collinsville",
"north las vegas",
"schenectady",
"garden city",
"morton",
"wadsworth",
"burton",
"providence",
"newnan",
"indpls",
"laguna hills",
"malvern",
"north fort myers",
"martinsburg",
"morristown",
"plant city",
"allen",
"huron",
"east lansing",
"florissant",
"longwood",
"syracuse",
"massillon",
"cedar park",
"santa barbara",
"zeeland",
"phila",
"metairie",
"euless",
"sherwood",
"saint charles",
"salina",
"lake oswego",
"middleburg",
"lorain",
"bay city",
"smithville",
"linton",
"college station",
"northridge",
"woodland",
"altamonte springs",
"bolingbrook",
"keizer",
"cumberland",
"crossville",
"williamstown",
"conyers",
"boonville",
"oak park",
"cadillac",
"saint petersburg",
"claremont",
"snellville",
"laredo",
"new braunfels",
"kirkland",
"hurst",
"pendleton",
"linden",
"staunton",
"nampa",
"gulfport",
"salinas",
"west covina",
"flagstaff",
"sugar land",
"avondale",
"moses lake",
"elizabeth",
"brooksville",
"kingman",
"oakdale",
"mt. vernon",
"brookville",
"ironton",
"fairborn",
"perrysburg",
"delray beach",
"oxnard",
"derby",
"woodland hills",
"santa clara",
"normal",
"gardena",
"temecula",
"vincennes",
"fairmont",
"san angelo",
"forest grove",
"klamath falls",
"ottawa",
"byron center",
"waynesville",
"norcross",
"nashua",
"fort smith",
"nederland",
"vienna",
"oviedo",
"chatsworth",
"clifton",
"helena",
"hilliard",
"ellensburg",
"montrose",
"pineville",
"deridder",
"mountain view",
"cherry hill",
"tinley park",
"elkhorn",
"davie",
"gladstone",
"port orange",
"hawthorne",
"plantation",
"big rapids",
"versailles" };
        }

        public string Generate()
        {
            return citynames[random.Next(0, citynames.Count)];
        }
    }
}
